package org.springframework.beans.factory;

import org.springframework.beans.BeansException;

import java.util.Map;

/**
 * @Name ListableBeanFactory
 * @Description: 支持集合操作的 Bean 容器接口
 * 描述信息：继承自 BeanFactory，扩展为支持集合操作的 Bean 容器。
 * 扩展：新增了支持集合操作的功能。
 * - 支持获取指定类型的 Bean 实例集合。
 * - 支持获取所有已注册的 Bean 定义名称。
 * @Version v1.0.0
 * @Author: lichao
 * @Date: 2024-03-15 15:56:33
 **/
public interface ListableBeanFactory extends BeanFactory {

    /**
     * 获取指定类型的 Bean 实例集合
     *
     * @param type Bean 实例类型
     * @return java.util.Map<java.lang.String, T> Bean 实例集合
     * @version v1.0.0
     * @author lichao
     * @date 2024-03-15 15:57:23
     */
    <T> Map<String, T> getBeansOfType(Class<T> type) throws BeansException;

    /**
     * 获取所有已注册的 BeanDefinition 信息的名称
     *
     * @return java.lang.String[] BeanDefinition 名称集合
     * @version v1.0.0
     * @author lichao
     * @date 2024-03-15 15:58:08
     */
    String[] getBeanDefinitionNames();

}
